package com.cskaoyan.javase.homework.day06.advance;

import java.util.Arrays;

/**
 * 真正的向一个int数组中新增元素
 *
 * @since 14:55
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class RealInsertIntElement {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 2, 324, 23, 1};
        int[] newArr = realAddElementInIntArr(arr, 999);
        System.out.println(Arrays.toString(newArr));
    }

    /**
     * 利用数组元素的拷贝,将一个元素真正意义上插入一个数组
     * 该方法会返回插入一个元素后的新数组
     *
     * @param old 被插入元素的旧数组
     * @param target 被插入的元素
     * @return int[]
     * @author wuguidong@cskaoyan.onaliyun.com
     * @since 2022/07/07 18:43
     */
    public static int[] realAddElementInIntArr(int[] old, int target) {
        // 1.首先创建新数组,新数组的长度 = 老数组的长度 + 1
        int[] result = new int[old.length + 1];

        /*
            新数组的下标,从0开始,然后每赋值一次,该下标+1
            由于新数组的长度是老数组长度+1,所以这里无需担心数组越界
         */
        int newIndex = 0;
        // 2.新数组创建完毕后,给新数组中的元素赋值
        // 遍历老数组,将其中的每一个元素都赋值到新数组中
        for (int element : old) {
            result[newIndex] = element;
            newIndex++;
        }
        // 把新增的元素,赋值到新数组的最后一个位置
        result[result.length - 1] = target;
        return result;
    }
}
